package main

import (
	"iot/common/sys"
	"iot/plat/calculate"
	"iot/plat/console"
	"iot/plat/device"
	"log"
	"os"
	"os/signal"
	"path/filepath"
	"syscall"
)

func main() {
	//配置文件初始化
	sys.InitConfig()

	//设备数据初始化
	if err := device.GetDeviceMgr().Init(); err != nil {
		panic(err)
	}

	//启动控制台
	err := console.StartConsole()
	if err != nil {
		panic(err)
	}

	//启动计算模块
	calculated.Start()

	//注册退出信号
	sigs := make(chan os.Signal, 1)
	signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
	sig := <-sigs
	if sig == syscall.SIGTERM {
		sys.CloseDB()
		return
	}
}

func redirectLog() {
	exe, err := os.Executable()
	if err != nil {
		log.Fatal(err)
	}
	dir := filepath.Dir(exe)

	// 创建日志文件
	logPath := filepath.Join(dir, "platform.log")
	logFile, err := os.OpenFile(logPath, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
	if err != nil {
		log.Fatalf("无法创建日志文件: %v", err)
	}

	// 重定向标准输出和标准错误
	os.Stdout = logFile
	os.Stderr = logFile

	// 如果需要，也可以关闭标准输入
	os.Stdin, _ = os.Open(os.DevNull) // 或者直接关闭：os.Stdin.Close()，但注意关闭后读取会出错
}
